/*
axios配制处理
1：下载axios
2:导入axios
3:创建axios副本
4：设置请求拦截与响应拦截
5：暴露出去
6：src/api/模块.js
    a:导入request
    b:封装api并暴露
7：使用
   import {方法名} from '路径'

*/
import { Message } from 'element-ui'
import store from '@/store'
import axios from 'axios'
import i18n from '@/lang'
import router from '@/router' // router===this.$router
// process.env===={NODE_ENV:'development/production'}
// 环境变量

/*
 开发环境
  1:根目录（package.json同级目录）创建.env.development
  2:定义变量
     要求：VUE_APP_开头 = 值   如:VUE_APP_URL = '123'
  3：访问：process.env.VUE_APP_URL

  生产环境
  1:根目录（package.json同级目录）创建.env.production
  2:定义变量
     要求：VUE_APP_开头 = 值   如:VUE_APP_URL = '123'
  3：访问：process.env.VUE_APP_URL
*/
const _axios = axios.create({
  // process.env.NODE_ENV==='development/production'
  // baseURL: 'http://localhost:3000/api',
  // baseURL: process.env.NODE_ENV === 'development' ? 'http://localhost:3000/api' : 'http://ihrm-java.itheima.net/api',
  baseURL: process.env.VUE_APP_URL,
  timeout: 10000,
  withCredentials: true
  // cookie:主动参与接口请求,但跨域情况下是不参与的，加上 withCredentials: true跨域也会参与了
})

_axios.interceptors.request.use(
  (config) => {
    /*
     接口请求头
       1：不需要token你加了不报错
           config.headers.Authorization = `Bearer ${store.state.user.token}`
       2：不需要token,加了直接报错
          a:不需要token的请求api配制中加入  noToken:true
          if(!config.noToken){
             config.headers.Authorization = `Bearer ${store.state.user.token}`
          }
    */
    if (!config.noToken) {
      config.headers.Authorization = `Bearer ${store.state.user.token}`
    }
    // console.log(config)
    config.url += config.url.includes('?') ? '&' : '?' + 'lang=' + i18n.locale
    return config
  },
  (error) => {
    return Promise.reject(error)
  }
)
// 响应拦截
_axios.interceptors.response.use(
  (res) => {
    // 状态码：2开头
    if (res.data.success) {
      // return new Promise((resolve, reject) => {
      //   resolve(res.data)
      // })
      return res.data
    } else {
      // 错误提示
      console.log('错误信息', res)
      Message.error(res.data.message)
      // 中止后面.then代码执行，执行.catch
      return Promise.reject(new Error(res.data.message))
      //
      // return new Promise((resolve, reject) => {
      //   reject('123')
      // })

      // return Promise.reject(new Error(res.data.message))
    }
  },
  (error) => {
    // 状态码：非2开头
    /*
    状态码
       2开头：成功
       3开头：重定向
         301：永久重定向
         304：协商缓存
              资源过期了，进行http请求，但接口告诉客户端资源无修改，还可使用
       4:客户端错误
          401：无权限
          403：无资源权限
          404：找不到
          400:请求参数错误
       5：服务器
    */
    /*
      // 401:什么意思？无权限
        1：删除token
        2:用户信息删除
        3：错误信息提示一下
        4:跳转到登陆页
      */
    if (error.response && error.response.status === 401) {
      store.commit('user/LOGOUT')
      Message.error(error.response.data.message)
      router.push('/login')
    }
    // console.dir(error)
    return Promise.reject(error)
  }
)
export default _axios
